<?php
/*
根据以下的参考可知，按BAE进行包装的效果很好，但是ACE完全不支持,因此用CeFile代替。


http://ace.aliyun.com/index/help/?help_id=87&sort_id=13
安全禁用函数
…………
其他：
stream_socket_server
import_request_variables
get_headers
sys_getloadavg
openlog
syslog
closelog
debug_zval_dump
mail
mysql_pconnect
无posix与socket扩展
配置限制
allow_url_fopen：off
allow_url_include：off


http://sae.sina.com.cn/?m=devcenter&catid=11&content_id=213
…………
SAE的Storage支持append吗？我的程序需要日志输出怎么做？
    Storage目前不支持追加写，所以目前不适合作为程序的日志输出。另外由于SAE禁用了本地持久化的IO操作，所以对于日志输出功能，我们推荐您采用以下的做法：
    1. 用php的sae_debug("message")函数输出日志，这样您可以在应用日志的debug日志里看到相应的日志输出，将来我们会提高日志打包下载功能。
    2. 将日志输出到MySQL中。
…………

http://cn.php.net/manual/zh/function.syslog.php
…………
syslog
(PHP 4, PHP 5)
syslog — Generate a system log message
Report a bug
说明
bool syslog ( int $priority , string $message )
syslog() generates a log message that will be distributed by the system logger.
For information on setting up a user defined log handler, see the syslog.conf (5) Unix manual page. More information on the syslog facilities and option can be found in the man pages for syslog (3) on Unix machines.
参数
priority
priority is a combination of the facility and the level. Possible values are:
syslog() Priorities (in descending order)
Constant	Description
LOG_EMERG	system is unusable
LOG_ALERT	action must be taken immediately
LOG_CRIT	critical conditions
LOG_ERR	error conditions
LOG_WARNING	warning conditions
LOG_NOTICE	normal, but significant, condition
LOG_INFO	informational message
LOG_DEBUG	debug-level message
message
The message to send, except that the two characters %m will be replaced by the error message string (strerror) corresponding to the present value of errno.
返回值
成功时返回 TRUE， 或者在失败时返回 FALSE.
范例Example #1 Using syslog()
<?php
// open syslog, include the process ID and also send
// the log to standard error, and use a user defined
// logging mechanism
openlog("myScriptLog", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// some code
if (authorized_client()) {
    // do something
} else {
    // unauthorized client!
    // log the attempt
    $access = date("Y/m/d H:i:s");
    syslog(LOG_WARNING, "Unauthorized client: $access {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})");
}
closelog();
?>
…………


http://dev.baidu.com/wiki/bae/index.php?title=Baelog#BaeLog.E6.89.93.E5.8D.B0.E6.97.A5.E5.BF.97.E6.A0.BC.E5.BC.8F.E5.A6.82.E4.B8.8B.E6.89.80.E7.A4.BA.EF.BC.9A
Baelog
目录[隐藏]
1 服务简介
2 使用示例
3 函数介绍
3.1 getInstance
3.2 logWrite
3.3 logTrace
3.4 logNotice
3.5 logDebug
3.6 logWarning
3.7 logFatal
4 日志示例详解
4.1 BaeLog打印日志格式如下所示：
4.2 字段含义分别为：
服务简介

BaeLog是云平台为开发者提供的日志记录服务。用户可以根据需求设置日志级别（1=>“致命”、2=>“警告”4=>“通知”、8=>“轨迹”、 16=>“调试”、）。 App Engine PHP 运行时环境包括对日志记录模块的特殊支持，您可以在“我的应用->应用信息->应用日志”下查看和分析您的应用程序的日志数据。

使用示例

开发者可以通过下面的示例，初步了解BaeLog的使用方法
<?php
//代码示例， 利用BaeLog打印“轨迹”、“通知”、“调试”、“警告”和 *“致命”日志。
require_once "BaeLog.class.php";
$logger=BaeLog::getInstance();
//打印一条警告日志，包括日志级别和日志内容
$logger ->logWrite(2, "this is for warning log print ");
//打印一条轨迹日志
$logger ->logTrace("this is for trace log print ");
//打印一条通知日志
$logger ->logNotice("this is for notice log print ");
//打印一条调试日志
$logger ->logDebug("this is for debug log print ");
//打印一条警告日志
$logger ->logWarning("this is for warning log print ");
//打印一条致命日志
$logger ->logFatal("this is for fatal log print ");
?>

开发者可以在本地进行编码，之后通过svn上传到云平台中。如有疑问，可以查看svn使用教程
函数介绍

getInstance
原型：
public function getInstance()
功能:获取BaeLog对象实例
参数：
参数	 说明
无	  
调用示例：
1. $logger=BaeLog::getInstance();
返回值：
返回值	 说明
BaeLog实例	 成功则返回BaeLog对象实例，失败返回null


logWrite
原型：
public function logWrite($level, $logmsg)
功能： 打印一条日志
参数：
参数	 说明
$ level	 整型。日志等级别，输入错误则默认为NOTICE
$logmsg	 字符串类型。日志内容
调用示例：
1. $logger=BaeLog::getInstance();
2. $logger ->logWrite(2, "this is for warning log print");
返回值：
返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
125
logTrace
原型：
public function logTrace($logmsg)
功能： 打印一条轨迹日志
参数：
参数	 说明
$logmsg	 字符串类型。日志内容
调用示例：
1. $logger=BaeLog::getInstance();
2. $logger logTrace ("this is for trace log print"); 
返回值：

返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
123
logNotice
原型：
public function logNotice($logmsg)
功能： 打印一条通知日志
参数：
参数	 说明
$logmsg	 字符串类型。日志内容
调用示例：
1. $logger=BaeLog::getInstance();
2. $logger ->logNotice("this is for notice log print");
返回值：
返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
124

logDebug
原型：
public function logDebug($logmsg)
功能： 打印一条调试信息日志
参数：
参数	 说明
$logmsg	 字符串类型。日志内容

调用实例：
1. $logger=BaeLog::getInstance();
2. $logger ->logDebug("this is for debug log print");
返回值：
返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
123

logWarning
原型：
public function logWarning($logmsg)
功能： 打印一条警告日志
参数：
参数	 说明
$logmsg	 字符串类型。日志内容
调用示例：
1. $logger=BaeLog::getInstance();
2. $logger ->logWarning("this is for warning log print");
返回值：
返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
125

logFatal
原型：
public function logFatal($level, $logmsg)
功能： 打印一条致命错误日志
参数：
参数	 说明
$logmsg	 字符串类型。日志内容
调用实例：
1. $logger=BaeLog::getInstance();
2. $logger ->logFatal("this is for fatal log print");
返回值：
返回值	 说明
整型或布尔类型	 打印日志的长度或者FALSE
返回值示例：
123
日志示例详解


BaeLog打印日志格式如下所示：
NOTICE: 03-07 13:42:00: log * 22316 ****.bae.baidu.com 172.***.***.*** 10.***.***.*** 406378272 this is for notice log print

字段含义分别为：
日志类型（FATAL、WARNING、DEBUG、NOTICE、TRACE）：NOTICE
打印时间：03-07 13:42:00
Log*pid：log * 22316
当前请求的HOST（$_SERVER[‘HTTP_HOST’]）：****.bae.baidu.com
客户端IP：$_SERVER[‘HTTP_CLIENTIP’]：172.***.***.***
服务器IP（$_SERVER[‘SERVER_ADDR’]）：10.***.***.***
LOGID：406378272
日志内容：this is for notice log print



http://bbs.aliyun.com/read.php?tid=57209
http://ikeji.tuita.com/blogpost/22345785
…………
应用程序文件的调试
用户可以通过打开管理中心的调试选项，查找代码中出错的部分，进行调试修改。
发布应用程序
借助管理中心启动应用程序，就可以通过设定二级域名或者绑定的顶级域名访问自己所编写的网站。
将网站移植到ACE平台
ACE平台上的开发对于PHP和Node.js的开发者来说是很容易上手的，由于语法规则相同，这里就不再赘述。只是如上文所说，出于安全角度的考虑，许多PHP函数被禁用。为了解决这个问题，ACE提供对许多原生函数API的兼容以及一些新的编程方法来绕过函数的禁用问题。下面以PHPWind的移植为例介绍ACE平台上的开发。
文件、目录读写
出于安全方面的考虑，ACE对本地文件读写进行了一些限制，要求将用户数据放在OSS（开放存储服务，具备高可靠性及可扩展性的海量数据存储）中，并且文件读写都需使用ACE提供的统一接口。ACE支持创建用户数据目录，也支持创建源代码文件上的目录。PHP自带的fread、fwrite已被ACE默认关闭，请使用以下方法实现：
< ?php
Class CeFile{}
Function write($fileName, $content, $sync=0) 文件写入
$fileName  文件路径（相对路径）
$content  文件内容
$sync    是否需要同步到所有Web端，为保证多个Web端数据同步，默认设为0
返回 true|false
Function read($fileName) 读取文件内容
$fileName 文件路径（相对路径）
返回文件内容|false
Function delete($fileName) 删除文件
$fileName 文件路径（相对路径）
返回 true|false
成员变量errno 为错误代号
成员变量errmsg 为返回的错误信息供调试时使用
?>
ACE文件读写方法如下：
//创建cefile对象
$ce = new CeFile()；
//文件写入
$ce->write($fileName, $content, $sync=0);
//读取文件内容
$ce->read($fileName);
//删除文件
$ce->delete($fileName);
…………
*/
?>